home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CU Amiga Super CD-ROM 23
/
CU Amiga - Super CD-ROM 23 (June 1998).iso
/
CUCD
/
Online
/
weazel
/
source
/
weazel.c
Wrap
C/C++ Source or Header
|
1998-03-30
|
3KB
|
179 lines
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netdb.h>
void uzmislovo (int soq, char *slovo) {
if (recv (soq, slovo, 1, 0)!=1) {
perror("recv");
exit(1);
}
}
void pop_poruka (int soq, char *slovo) {
do {
uzmislovo (soq,slovo);
putchar(*slovo);
} while (!(*slovo=='\r'));
uzmislovo (soq,slovo);
if (!(*slovo=='\n')) {
exit(1);
}
printf ("\n");
}
int check (int soq) {
char *slovo = '\0';
char buf[4];
uzmislovo (soq, slovo);
if (*slovo=='+') {
if ((recv (soq, buf, 2, 0)==2) && (buf[0]=='O'&&buf[1]=='K')) {
printf("+OK");
/* stvar je ok - ispisujemo poruku i kraj f-je */
pop_poruka (soq,slovo);
return(0);
}
else {
/* nekaj ne stima. vjerojatno nije POP server */
printf("POP3 server not responding.\n");
exit(1);
}
}
else if (*slovo=='-') {
if ((recv (soq, buf, 3, 0)==3) && ((buf[0]=='E') && (buf[1]=='R') && (buf[2]='R'))) {
printf("+ERR");
/* greska - ispisujemo poruku i kraj programa */
pop_poruka (soq,slovo);
exit(1);
}
else {
/* nekaj ne stima. vjerojatno nije POP server */
printf("POP3 server not responding.\n");
exit(1);
}
}
/* nekaj ne stima. vjerojatno nije POP server */
printf("POP3 server not responding.\n");
exit(1);
}
void main (int argc, char *argv[]) {
int soq;
int count;
struct hostent *host;
struct sockaddr_in sin = { 0 };
FILE *fp;
FILE *env;
char buf[512];
char hostname[512];
char user_cmd[38] = "USER \0";
char user[32];
char pass_cmd[38] = "PASS \0";
char pass[32];
if (argc!=2) {
printf ("Usage: weazel <message_file>\n");
exit(1);
}
if (!(fp=fopen(argv[1],"rb"))) {
printf ("Error opening file %s.\n",argv[1]);
exit(1);
}
if (!(env=fopen("ENV:WEAZEL","rb"))) {
printf ("Config file not found.\n");
exit(1);
}
fgets(user,32,env);
fgets(pass,32,env);
fgets(hostname,512,env);
/* sad maknemo CR i LF sa kraja houstnejma ako ih ima */
if (hostname[strlen(hostname)-1]=='\r'||hostname[strlen(hostname)-1]=='\n') {
hostname[strlen(hostname)-1]='\0';
}
if (hostname[strlen(hostname)-1]=='\r'||hostname[strlen(hostname)-1]=='\n') {
hostname[strlen(hostname)-1]='\0';
}
fclose(env);
soq = socket (AF_INET,SOCK_STREAM,0);
if (soq < 0) {
perror ("socket");
exit (1);
}
if (!(host=gethostbyname(hostname))) {
perror ("gethostbyname");
exit (1);
}
memcpy (&sin.sin_addr, host->h_addr, sizeof(sin.sin_addr));
sin.sin_family = host->h_addrtype;
sin.sin_port = 110; /* POP3 port */
if(connect(soq, (struct sockaddr *)&sin, sizeof(struct sockaddr_in)) < 0)
{
perror("connect");
exit(1);
}
printf("Connected to %s.\n",hostname);
check(soq);
strcat(user_cmd,user);
send(soq,user_cmd,strlen(user_cmd),0);
check(soq);
strcat(pass_cmd,pass);
send (soq,pass_cmd,strlen(pass_cmd),0);
check(soq);
send (soq,"XTND XMIT\r\n",11,0);
check(soq);
do {
count = fread(buf, 1, 512, fp);
send (soq,buf,count,0);
} while (!(feof(fp)));
send (soq,"\r\n.\r\n",5,0);
check(soq);
send (soq,"QUIT\r\n",6,0);
check(soq);
CloseSocket(soq);
}